﻿package mortal.game.scene3D.layer3D.utils
{
    import Message.Public.*;
    import frEngine.pools.*;
    import mortal.game.*;
    import mortal.game.model.*;
    import mortal.game.resource.*;
    import mortal.game.rules.*;
    import mortal.game.scene3D.layer3D.*;
    import mortal.game.scene3D.map3D.*;
    import mortal.game.scene3D.map3D.sceneInfo.*;
    import mortal.game.scene3D.map3D.util.*;
    import mortal.game.scene3D.player.entity.*;

    public class NPCUtil extends EntityLayerUtil
    {
        private var _npcMap:NPCDictionary;

        public function NPCUtil(param1:PlayerLayer)
        {
            this._npcMap = new NPCDictionary();
            super(param1);
            return;
        }// end function

        public function addNPC(param1:NPCInfo) : NPCPlayer
        {
            var _loc_2:* = this._npcMap.getNpc(param1.snpc.npcId) as NPCPlayer;
            if (_loc_2 == null)
            {
                _loc_2 = FrObjectPool.getObject(NPCPlayer, this) as NPCPlayer;
                this._npcMap.addNpc(param1.snpc.npcId, _loc_2);
            }
            _loc_2.updateInfo(param1);
            layer.addChild(_loc_2);
            return _loc_2;
        }// end function

        public function removeNPC(param1:int) : void
        {
            var _loc_2:* = this._npcMap.removeNpc(param1);
            if (_loc_2)
            {
                _loc_2.dispose();
            }
            return;
        }// end function

        override public function removeAll() : void
        {
            this._npcMap.removeAll();
            return;
        }// end function

        public function getNpc(param1:int) : NPCPlayer
        {
            return this._npcMap.getNpc(param1);
        }// end function

        override public function updateEntity() : void
        {
            var _loc_2:NPCPlayer = null;
            var _loc_3:SPoint = null;
            var _loc_4:Boolean = false;
            var _loc_5:NPCInfo = null;
            if (!Game.sceneInfo)
            {
                return;
            }
            var _loc_1:* = Game.sceneInfo.npcInfos;
            if (_loc_1.length < 1)
            {
                return;
            }
            for each (_loc_5 in _loc_1)
            {
                
                _loc_3 = _loc_5.snpc.point;
                if (SceneRange.isInEntityRange(_loc_3.x, _loc_3.y, _loc_5.width, _loc_5.height) && _loc_5.isAddStage)
                {
                    _loc_4 = this.isHideNPCInCrossSpy(_loc_5);
                    _loc_2 = this.getNpc(_loc_5.snpc.npcId);
                    if (_loc_2 == null)
                    {
                        if (!_loc_4)
                        {
                            _loc_2 = this.addNPC(_loc_5);
                        }
                    }
                    else if (_loc_2.parent == null && !_loc_4)
                    {
                        layer.addChild(_loc_2);
                    }
                    if (_loc_2 && layer.contains(_loc_2) && _loc_4)
                    {
                        this.removeNPC(_loc_5.snpc.npcId);
                    }
                    else
                    {
                        _loc_2.updateIsNeerRole();
                    }
                    continue;
                }
                this.removeNPC(_loc_5.snpc.npcId);
            }
            return;
        }// end function

        private function isHideNPCInCrossSpy(param1:NPCInfo) : Boolean
        {
            return false;
        }// end function

        public function updateNpcIsAddToStage(param1:int, param2:Boolean, param3:int = -1) : void
        {
            var _loc_4:* = SceneConfig.instance.getNpcInfo(param1, param3);
            if (_loc_4 && _loc_4.isAddStage != param2)
            {
                _loc_4.isAddStage = param2;
                if (param3 == -1 || param3 == MapFileUtil.mapID)
                {
                    ThingUtil.isMoveChange = true;
                }
            }
            return;
        }// end function

        public function updateNpcToDefaultShow(param1:int) : void
        {
            var _loc_5:NPCInfo = null;
            var _loc_2:* = SceneConfig.instance.getSceneInfo(param1);
            var _loc_3:* = _loc_2.npcInfos;
            var _loc_4:int = 0;
            while (_loc_4 < _loc_3.length)
            {
                
                _loc_5 = _loc_3[_loc_4] as NPCInfo;
                _loc_5.isAddStage = _loc_5.tnpc.defaultType == 0;
                _loc_4++;
            }
            ThingUtil.isMoveChange = true;
            return;
        }// end function

        public function updateAllNpcName() : void
        {
            var _loc_1:NPCPlayer = null;
            for each (_loc_1 in this._npcMap.map)
            {
                
                _loc_1.updateName();
            }
            return;
        }// end function

        public static function get NPCPlayerLink() : String
        {
            return EntityType.NPC + EntityUtil.LinkStr;
        }// end function

        public static function getNPCPlayerName(param1:int) : String
        {
            return NPCUtil.NPCPlayerLink + param1;
        }// end function

        public static function getNPCPlayerId(param1:String) : int
        {
            return int(param1.split(NPCUtil.NPCPlayerLink)[1]);
        }// end function

    }
}
